home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMICUS / AMICUS08.ADF / AmigaBasicProgs / Othello (.txt) < prev    next >
AmigaBASIC Source Code  |  1986-04-02  |  7KB  |  262 lines

  1.  
  2. LIBRARY "graphics.library"
  3.  
  4. PRINT:PRINT:PRINT
  5. PRINT SPC(28);"Converted to AmigaBasic"
  6. PRINT
  7. PRINT SPC(39);"By"
  8. PRINT
  9. PRINT SPC(35);"Rick Wirch"
  10. PRINT
  11. PRINT SPC(26);"Press Mouse Button to Start"
  12.  
  13. WHILE B=0: B= MOUSE(0): WEND
  14. WHILE B<>0:B= MOUSE(0): WEND
  15.  
  16.    10 REM OTHELLO
  17.    20 DIM A(10,10),I4(9),J4(9),strat%(10,10)
  18.    30 FOR i=1 TO 10: FOR j=1 TO 10:strat%(i,j)=0:NEXT j,i
  19.    40 SCREEN 1,640,200,3,2
  20.    50 CLS
  21.    60 COLOR 1
  22.    70 DIM green%(1), red%(1),gblock%(500),square%(1000)
  23.    80 green%(0)=0: red%(0)=&Hffff
  24.    90 w=39:h=17: pc=1: REM width and height of board squares         
  25.   100 WINDOW 2,"Board",(250,11)-(629,186),0,1: WINDOW OUTPUT 2
  26.       RP& = WINDOW( 8)
  27.   110 WINDOW 3,"Othello",(0,11)-(238,186),0,1: REM
  28.   120 WINDOW OUTPUT 2:COLOR 1
  29.   125 PALETTE 0, 6/15, 9/15, 15/15:PALETTE 1, 1,1,1: PALETTE 2, 0,0,0
  30.   130 PALETTE 4, 14/15, 3/15, 0/15:PALETTE 5, 5/15, 13/15, 0/15
  31.   140 f2=0
  32.   150 GOSUB 1560
  33.   200 FOR i=1 TO 10:FOR j=1 TO 10:strat%(i,j)=0:NEXT j,i
  34.   210 PRINT"Shall I use my best strategy?"
  35.       PRINT"(Click Yes OR No)": GOSUB 2200
  36.   220 IF x$="N" THEN 280
  37.   230 IF x$<>"Y" THEN 210
  38.   240 DATA 4,-1,2,2,2,2,-1,4
  39.   250 FOR i=2 TO 9 STEP 7:RESTORE 240: FOR j=2 TO 9:READ strat%(i,j): NEXT j,i
  40.   260 FOR j=2 TO 9 STEP 7: RESTORE 240: FOR i=2 TO 9:READ strat%(i,j): NEXT i,j
  41.   270 FOR i=3 TO 8 STEP 5:FOR j=3 TO 8 STEP 5:strat%(i,j)=-1:NEXT j,i
  42.   280 B=-1: Wt=1
  43.   290 RESTORE 310
  44.   300 FOR K =2 TO 9:READ I4(K):NEXT
  45.   310 DATA 0,-1,-1,-1,0,1,1,1
  46.   320 FOR K =2 TO 9:READ J4(K): NEXT
  47.   330 DATA 1,1,0,-1,-1,-1,0,1
  48.   340 FOR i = 1 TO 10: FOR j = 1 TO 10: A(i,j)=0:NEXT j,i
  49.   350 A(5,5)=Wt:A(6,6)=Wt:A(5,6)=B:A(6,5)=B
  50.   360 C1 =2:H1 =2: Z =0
  51.   370 N1 =4
  52.   380 hu=Wt:c=B
  53.   390 WINDOW OUTPUT 3 :PRINT "You will play White."
  54.   400 GOSUB 1560 : REM draw board and pieces.
  55.   410 PRINT"Do you want to go first?"
  56.       PRINT"(Click Y OR N)"
  57.   420 GOSUB 2200
  58.   430 IF x$ = "N" THEN 460
  59.   440 IF x$<>"Y" THEN 410
  60.   450 GOTO 790
  61.   460 PRINT"I'm thinking.": B1=-1:J3=0:I3=0:T1=c:T2=hu
  62.   470 FOR i = 2 TO 9
  63.   480 FOR j = 2 TO 9
  64.   490 IF A(i,j)<>0 THEN 580
  65.   500 GOSUB 1340
  66.   510 IF F1 = 0 THEN 580
  67.   520 U=-1:GOSUB 1420: IF S1=0 THEN 580
  68.   530 S1=S1+strat%(i,j)
  69.   540 IF S1<B1 THEN 580
  70.   550 IF S1>B1 THEN 570
  71.   560 IF RND(100)>50 THEN 580
  72.   570 B1 = S1: I3 = i:J3 = j
  73.   580 NEXT j,i
  74.   590 IF B1>0 THEN 630
  75.   600 PRINT"I have to forfeit my move."
  76.   610 IF Z = 1 THEN 1060
  77.   620 Z = 1: GOTO 790
  78.   630 Z=0
  79.   640 PRINT"I'll circle my next move"
  80.   650 pc=0:x=I3-2:y=J3-2:WINDOW OUTPUT 2:GOSUB 1720:pc=1
  81.   660 i=I3:j=J3:GOSUB 1420: REM get # captured pieces.
  82.   670 C1=C1+S1+1:H1=H1-S1:N1=N1+1
  83.   680 PRINT"That will give me"
  84.   690 PRINT S1;" of your pieces."
  85.   700 IF f2=0 THEN SLEEP: GOTO 760
  86.   710 PRINT"Click left button when" 
  87.   720 PRINT"you're ready for me to"
  88.   730 PRINT"complete my play."
  89.   740 '
  90.   750 B% = MOUSE(0):x%= MOUSE( 1): y%= MOUSE( 2):IF B%=0 THEN GOTO 750
  91.   755 WHILE B%<>0: B%= MOUSE(0):x%= MOUSE( 1): y%= MOUSE( 2): WEND
  92.   760 i=I3:j=J3:U=1:GOSUB 1420: REM flip captured pieces
  93.   770 IF H1=0 THEN 1060
  94.   780 IF N1=64 THEN 1060
  95.   790 T1=hu:T2=c
  96.   800 PRINT "Click on your move square."
  97.   810 WINDOW OUTPUT 2: GOSUB 1820: WINDOW OUTPUT 3
  98.   820 IF y>7 AND y<10 THEN
  99.          IF     x>0 AND x<4 THEN 
  100.             pr% = 2 
  101.          ELSEIF x>3 AND x<7 THEN 
  102.             pr% = 1
  103.          ELSE 
  104.             pr% = 4
  105.          END IF
  106.       ELSE
  107.          IF y>-1 AND y<8 AND x>-1 AND x<8 THEN pr%=3 :ELSE pr%=4
  108.       END IF
  109.   830 ON pr% GOTO 1280,840,880,800
  110.   840 PRINT"You are forfeiting your turn."
  111.   850 IF Z=1 THEN 1060
  112.   860 Z=1
  113.   870 GOTO 460
  114.   880 i=x+2: j=y+2: IF A(i,j)=0 THEN 910
  115.   890 PRINT"Sorry; that square is"
  116.   900 PRINT"occupied; try again.": GOTO 800
  117.   910 GOSUB 1340: IF F1=1 THEN 950
  118.   920 PRINT"Sorry; you're not next to "
  119.   930 PRINT " one of my pieces;"
  120.   940 PRINT"Try again.":GOTO 800
  121.   950 U=-1: GOSUB 1420: IF S1>0 THEN 990
  122.   960 PRINT"Sorry, that doesn't flank"
  123.   970 PRINT"a row; try again."
  124.   980 GOTO 800
  125.   990 Z=0:PRINT"That gives you "
  126.  1000 PRINT S1;" of my pieces."
  127.  1010 U=1: GOSUB 1420
  128.  1020 H1=H1+S1+1: C1=C1-S1: N1=N1+1
  129.  1030 IF C1=0 THEN 1060
  130.  1040 IF N1=64 THEN 1060
  131.  1050 GOTO 460
  132.  1060 PRINT: PRINT"You have ";H1;" pieces,"
  133.  1070 PRINT "and I have ";C1;" pieces."
  134.  1080 IF H1=C1 THEN 1120
  135.  1090 IF H1>C1 THEN 1130
  136.  1100 PRINT"Sorry, I won that one."
  137.  1110 GOTO 1140
  138.  1120 PRINT"A Tie!": GOTO 1270
  139.  1130 PRINT"YOU WON!!"
  140.  1140 C1=C1-H1: IF C1>0 THEN 1160
  141.  1150 C1=-C1
  142.  1160 C1=64*C1/N1
  143.  1170 PRINT"That was a ";
  144.  1180 IF C1<11 THEN 1260
  145.  1190 IF C1<25 THEN 1250
  146.  1200 IF C1<39 THEN 1240
  147.  1210 IF C1<53 THEN 1230
  148.  1220 PRINT"PERFECT GAME!": GOTO 1270
  149.  1230 PRINT"Walkaway.": GOTO 1270
  150.  1240 PRINT"Real Fight.": GOTO 1270
  151.  1250 PRINT"Hot Game!": GOTO 1270
  152.  1260 PRINT"Squeaker!!"
  153.  1270 PRINT
  154.  1280 PRINT"Do you want to play another "
  155.       PRINT"game?  (Click Y OR N)"
  156.  1290 GOSUB 2200
  157.  1300 IF x$="Y" THEN RESTORE 310: GOTO 200
  158.  1310 PRINT"Thanks for playing!"
  159.  1320 WINDOW CLOSE 2: WINDOW CLOSE 3: SCREEN CLOSE 1
  160.  1330 END
  161.  1340 F1=0: FOR I1 = -1 TO 1
  162.  1350 FOR J1= -1 TO 1
  163.  1360 IF A(i+I1, j+J1)=T2 THEN F1=1:I1=1:J1=1
  164.  1370 NEXT  J1, I1
  165.  1380 RETURN
  166.  1390 REM
  167.  1400 REM
  168.  1410 REM
  169.  1420 S1=0
  170.  1430 FOR K=2 TO 9:I5=I4(K):J5=J4(K):I6=i+I5:J6=j+J5
  171.  1440 S3=0: IF A(I6,J6)<>T2 THEN 1510
  172.  1450 S3=S3+1:I6=I6+I5:J6=J6+J5:IF A(I6,J6)=T1 THEN 1480
  173.  1460 IF A(I6,J6)=0 THEN 1510
  174.  1470 GOTO 1450
  175.  1480 S1=S1+S3: IF U<>1 THEN 1510
  176.  1490 I6=i:J6=j: FOR K1=0 TO S3
  177.  1500 A(I6,J6)=T1: GOSUB 2180: I6=I6+I5:J6=J6+J5:NEXT K1
  178.  1510 NEXT K
  179.  1520 RETURN
  180.  1530 REM
  181.  1540 REM
  182.  1550 REM
  183.  1560 WINDOW OUTPUT 2: GOSUB 1890:  REM Draw Game Board
  184.  1570 FOR i=2 TO 9: FOR j=2 TO 9
  185.  1580 state%=A(i,j)+2: x=i-2: y=j-2
  186.  1590 ON state% GOSUB 1690, 1700, 1680
  187.  1600 NEXT j,i
  188.  1610 WINDOW OUTPUT 3: COLOR 1
  189.  1620 RETURN
  190.  1630 REM ***** end routine *****
  191.  1640 WINDOW CLOSE 2: WINDOW CLOSE 3: SCREEN CLOSE 1
  192.  1650 REM 
  193.  1660 END
  194.  1670 REM ***** the white and black piece plotters *****
  195.  1680 WINDOW OUTPUT 2: COLOR 1: GOTO 1720: REM white piece maker.
  196.  1690 WINDOW OUTPUT 2: COLOR 2: GOTO 1720: REM black piece maker
  197.  1700 RETURN: REM dummy; don't-put-piece subroutine.
  198.  1710 REM
  199.  1720 REM ***** piece maker *****
  200.  1730 cx0=x0+INT(w/2)+x*w  : cy0=INT(h/2)+y*h
  201.  1740 CIRCLE(cx0,cy0), 12
  202.  1750 IF pc=0 THEN 1780
  203.  1760 PATTERN red%
  204.  1770 PAINT(cx0,cy0)
  205.  1780 COLOR 1: WINDOW OUTPUT 3
  206.  1790 RETURN
  207.  1800 REM
  208.  1810 REM
  209.  1820 REM ***** Get x, y of mouse when left button pressed.
  210.  1830 REM
  211.  1840 REM
  212.  1850 B% = MOUSE( 0) : IF B%=0 THEN GOTO 1850
  213.  1860 WHILE B%<>0: B% = MOUSE( 0): xm%= MOUSE( 1): ym%= MOUSE( 2): WEND
  214.  1870 x=INT((xm%-42)/w)-6 :y=INT(ym%/h)
  215.  1880 RETURN
  216.  1890 REM ***** DRAW GAME BOARD *****
  217.  1900 '
  218.  1910 '
  219.  1920 '
  220.  1930 wb=8*w: hb=8*h
  221.  1940 x0=30 : COLOR 4
  222.  1950 AREA( x0,0): AREA( x0+wb-1,0): AREA( x0+wb-1,hb-1): AREA( x0,hb-1 ): AREAFILL
  223.  1960 COLOR 5
  224.  1970 AREA (x0,0): AREA (x0+w-1,0): AREA (x0+w-1,h-1): AREA (x0,h-1): AREAFILL
  225.  1980 GET(x0,0)-(x0+w,h),gblock%
  226.  1990 PUT(x0+w,h),gblock%,PSET
  227.  2000 GET(x0,0)-(x0+2*w,2*h),square%
  228.  2010 FOR i=x0 TO x0+6*w STEP 2*w
  229.  2020 FOR j=0 TO 6*h STEP 2*h
  230.  2030 PUT(i,j),square%,PSET
  231.  2040 NEXT j,i
  232.  2050 REM
  233.  2060 REM
  234.  2070 REM ***** draw forfeit and quit boxes
  235.  2080 REM
  236.  2090 COLOR 1, 0: REM 
  237.  2095 CALL Move( RP&,103,154): PRINT "FORFEIT":CALL Move( RP&, 215, 154): PRINT " QUIT "
  238.  2097 CALL Move( RP&, 35,154): PRINT "YES":CALL Move( RP&, 312,154):PRINT " NO"
  239.  2100 LINE (90,144)-(170,159),,B : LINE(202,144)-(282,159),,B
  240.  2110 LINE (30,144)-(65,159),,B  : LINE(307,144)-(342,159),,B
  241.  2120 REM 
  242.  2150 REM 
  243.  2160 WINDOW OUTPUT 3: COLOR 1
  244.  2170 RETURN
  245.  2180 x=I6-2:y=J6-2: IF T1=hu THEN GOSUB 1680 :ELSE GOSUB 1690
  246.  2190 RETURN
  247.  2200 REM SUBRTN TO GET YES OR NO FROM MOUSE.
  248.  2210 REM
  249.  2220 WINDOW OUTPUT 2: GOSUB 1820: WINDOW OUTPUT 3
  250.  2230 IF y>7 AND y<10 THEN   
  251.          IF x=0 THEN 
  252.             x$="Y"
  253.          ELSEIF x=7 THEN 
  254.             x$="N"
  255.          ELSE 
  256.             x$=""
  257.          END IF
  258.       ELSE 
  259.          x$=""
  260.       END IF
  261.  2240 RETURN
  262.